"""
闭包
    语法：
        def 外部函数(参数)：
            ...
            def 内部函数(参数):
                ...
                可以调用外部函数的变量
                也可以有自己的返回值
            return 内部函数

    调用
        变量 = 外部函数(参数)
        变量()

    定义：是由函数及其相关的引用环境组合而成的实体。
    通俗的将： 函数中嵌套函数，并且使用return 返回一个内部函数
"""
# 有内有外  一个外部函数包含一个内部函数
# 内访问外 内部函数可以访问外部函数的变量
# 外返回内  外部函数的返回值是内部函数
# 作用：让外部函数执行之后的栈帧不释放，供内部函数不断调用
def fun1():
    # a = 10
    # print(f"我是fun1~~~a={a}") # 10

    def fun2():
        a = 15
        b = 20
        #print(f"我是fun2!!!a={a},b={b}") # a = 15
        return a + b

    # 函数也可以作为返回值返回
    return fun2()


# res是一个地址，是fun1的地址，表示的结果是fun2的结果（因为返回值是fun2）
res = fun1
print(res)  # res 是fun1的栈帧， 返回的结果的是fun2()
print(res())
# print(fun1())

